/*********************************
*-- 33 KDH Knieja ---------------*
*-- im. Harcerzy Września 1939 --*
*-- autor: Marcin Rzepisko ------*
*-- data: 2013-11-12 ------------*
**********************************/

package net.kdh.knieja.dao.klasy.sqlgenerator;

import net.kdh.knieja.dao.klasy.filtry.FiltrDAO;
import net.kdh.knieja.model.system.Artykul;

/**
 *
 * @author rz.marcin@gmail.com
 */
public class ArtykulSqlGenerator extends SqlGenerator<Artykul> {

    public ArtykulSqlGenerator() {
        super("ARTYKULY", "K_ARTYKULY");
    }

    @Override
    public String generujSelect(FiltrDAO filtr) {
        String query = "SELECT id_artykulu, tytul, tresc, data_utworzenia, id_autora FROM :nazwaTabeli".replaceFirst(":nazwaTabeli", getNazwaTabeli());
        if (filtr == null) {
            return query;
        }
        query += " WHERE :warunki";
        return query.replaceFirst(":warunki", filtr.generujWarunkiSQL()).replaceFirst(":nazwaTabeli", getNazwaTabeli());
    }

    @Override
    public String generujInsert(Artykul t) {
        String query = "INSERT INTO :nazwaTabeli (tytul, tresc, data_utworzenia, id_autora) VALUES (':tytul', ':tresc', ':data_utworzenia', :id_autora)";
        return query.replaceFirst(":nazwaTabeli", this.getNazwaTabeli())
                .replaceFirst(":tytul", t.getTytul())
                .replaceFirst(":tresc", t.getTresc())
                .replaceFirst(":data_utworzenia", t.getDataUtworzenia().toString())
                .replaceFirst(":id_autora", t.getAutor().getIdUzytkownika());
    }

    @Override
    public String generujDelete(String t_id) {
        String query = "DELETE FROM :nazwaTabeli WHERE id_artykulu = :id_artykulu";
        return query.replaceFirst(":nazwaTabeli", this.getNazwaTabeli())
                .replaceFirst(":id_artykulu", t_id);
    }

    @Override
    public String generujUpdate(Artykul t) {
        String parametry = "";
        String query = "";
        if (isNotNull(t.getIdArtykulu())) {
            query = "UPDATE :nazwaTabeli SET :parametry WHERE id_artykulu = :id_artykulu";

            if (isNotNull(t.getTytul())) {
                parametry += ":: tytul = '" + t.getTytul() + "'::";
            }
            if (isNotNull(t.getTresc())) {
                parametry += ":: tresc = '" + t.getTresc() + "'::";
            }
            if (isNotNull(t.getDataUtworzenia())) {
                parametry += ":: data_utworzenia = '" + t.getDataUtworzenia() + "'::";
            }
            if (isNotNull(t.getAutor()) && isNotNull(t.getAutor().getIdUzytkownika())) {
                parametry += ":: id_autora = " + t.getAutor().getIdUzytkownika() + "::";
            }

            if (!parametry.contains("::")) {
                return "";
            }


            query = query.replace(":parametry",
                    parametry.replaceAll("::::", ", ")
                    .replaceAll("::", "")).replaceFirst(":id_artykulu", t.getIdArtykulu());
        }
        return query.replaceFirst(":nazwaTabeli", this.getNazwaTabeli());
    }
}
